/**
 * 轮播图服务层
 * 处理轮播图相关的业务逻辑
 */

const BannerDao = require('../dao/banner.dao');
const bannerDao = new BannerDao();
class BannerService {
  constructor() {
  }

  /**
   * 获取首页轮播图列表
   * @returns {Promise<Array>} 轮播图列表
   */
  async getHomeBanners() {
    try {
      // 获取所有启用状态的轮播图
      const banners = await bannerDao.getActiveBanners();
      
      // 对轮播图数据进行业务处理
      // 可以在这里添加数据转换、过滤等逻辑
      const processedBanners = banners.map(banner => ({
        id: banner._id,
        title: banner.title,
        subtitle: banner.subtitle || '',
        image: banner.image,
        link: banner.link || '#',
        sortOrder: banner.sort_order,
        status: banner.status
      }));
      
      return processedBanners;
    } catch (error) {
      console.error('获取首页轮播图失败:', error);
      throw new Error('获取首页轮播图失败');
    }
  }

  /**
   * 获取单个轮播图详情
   * @param {string} bannerId - 轮播图ID
   * @returns {Promise<Object>} 轮播图详情
   */
  async getBannerDetail(bannerId) {
    try {
      const banner = await bannerDao.getBannerById(bannerId);
      if (!banner) {
        throw new Error('轮播图不存在');
      }
      
      return {
        id: banner._id,
        title: banner.title,
        subtitle: banner.subtitle || '',
        image: banner.image,
        link: banner.link || '#',
        sortOrder: banner.sort_order,
        status: banner.status,
        createTime: banner.create_time,
        updateTime: banner.update_time
      };
    } catch (error) {
      console.error('获取轮播图详情失败:', error);
      throw error;
    }
  }

  /**
   * 验证轮播图数据
   * @param {Object} bannerData - 轮播图数据
   * @returns {Object} 验证结果
   */
  validateBannerData(bannerData) {
    const errors = [];
    
    if (!bannerData.title || bannerData.title.trim() === '') {
      errors.push('轮播图标题不能为空');
    }
    
    if (!bannerData.image || bannerData.image.trim() === '') {
      errors.push('轮播图图片不能为空');
    }
    
    if (bannerData.sort_order !== undefined && (typeof bannerData.sort_order !== 'number' || bannerData.sort_order < 0)) {
      errors.push('排序序号必须是非负整数');
    }
    
    if (bannerData.status !== undefined && ![0, 1].includes(bannerData.status)) {
      errors.push('状态值必须是0或1');
    }
    
    return {
      isValid: errors.length === 0,
      errors
    };
  }

  /**
   * 格式化轮播图链接
   * @param {string} link - 原始链接
   * @returns {string} 格式化后的链接
   */
  formatBannerLink(link) {
    if (!link || link.trim() === '') {
      return '#';
    }
    
    // 确保链接格式正确
    if (link.startsWith('/')) {
      // 相对路径，不需要处理
      return link;
    } else if (!link.startsWith('http://') && !link.startsWith('https://') && !link.startsWith('#')) {
      // 既不是相对路径也不是完整URL，添加#
      return '#' + link;
    }
    
    return link;
  }
}

module.exports = BannerService;